package com.dhcc.DRGsHosp.application;


import java.util.List;
import java.util.Map;
import java.util.Set;

import org.dayatang.utils.Page;

import com.dhcc.DRGsHosp.core.domain.MedicalRecord;
import com.dhcc.DRGsHosp.core.domain.IndexCal;
import com.dhcc.DRGsHosp.core.domain.MrAppendPage;
import com.dhcc.DRGsHosp.core.domain.MrBaseInfo;
import com.dhcc.DRGsHosp.core.domain.MrDiagnose;
import com.dhcc.DRGsHosp.core.domain.MrExpense;
import com.dhcc.DRGsHosp.core.domain.MrExpenseSum;
import com.dhcc.DRGsHosp.core.domain.MrIpInfo;
import com.dhcc.DRGsHosp.core.domain.MrOperation;

public interface MedicalRecordApplication {

	public MedicalRecord getMedicalRecord(String id);
	
	public void creatMedicalRecord(MedicalRecord medicalRecord);
	
	public void updateMedicalRecord(MedicalRecord medicalRecord);
	
	public void removeMedicalRecord(MedicalRecord medicalRecord);
	
	public void removeMedicalRecords(Set<MedicalRecord> medicalRecords);
	
	public List<MedicalRecord> findAllMedicalRecord();
	
	public List<MedicalRecord> findMedicalRecordsByDate(String date);//date格式：YYYY-MM
	
	/**
	 * @methodname    :findMedicalRecord
	 * @description   : 
	 * @param         :
	 * @author        :fulianxia
	 * @return        :
	 * @date          :2015年4月21日
	 */
	public Page<Object[]> findMedicalRecord(int page, int pageSize,IndexCal IndexCal,Boolean isAllUsers);
	
	
	/**
	 * 
	 *  getMedicalRecordYbNum.  
	 *  @Description：获取某年每月的医保病例数
	 *  @Author ZouYiyu
	 *  @param year
	 * @param hospCode 
	 *  @return 
	 *  @Date:2017年7月20日下午1:36:47
	 */
	public List<Map<String, Object>> getMedicalRecordYbNum(String year, String hospCode);
	/**
	 * @methodname    :findCaseDRG
	 * @description   : 
	 * @param         :
	 * @author        :fulianxia
	 * @return        :
	 * @date          :2015年4月21日
	 */
//	public DRGs findCaseDRGs(String parId);
	
	/**
	 * 
	 * @methodname    :findCaseMDC
	 * @description   : 
	 * @param         :
	 * @author        :fulianxia
	 * @return        :
	 * @date          :2015年4月22日
	 */
//	public MDCGroup findCaseMDC(String parId);
	
	/**
	 * 
	 * @methodname    :findCaseADRG
	 * @description   : 
	 * @param         :
	 * @author        :fulianxia
	 * @return        :
	 * @date          :2015年4月22日
	 */
//	public ADRG findCaseADRG(String drgCode);
	
	/**
	 * 
	 * @methodname    :getLatestDate
	 * @description   : 获取最新一次监测时间
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2015年5月21日
	 */
	public String getLatestDate();
	
	/**
	 * @methodname    :getMedicalRecordNum
	 * @description   :获取某年每月的病例数
	 * @param         :
	 * @author        :WangTeng
	 * @param hospCode 
	 * @return        :
	 * @date          :2015年7月7日
	 */
	public List<Map<String, Object>> getMedicalRecordNum(String year, String hospCode);
	
	/**
	 * @methodname    :executeSqlStr
	 * @description   :执行sql语句
	 * @param         :
	 * @author        :WangTeng
	 * @return        :
	 * @date          :2015年9月11日
	 */
	public void executeSqlStr(String sql);

	/**
	 * @methodname    :getDRGsStdBy
	 * @description   :获取医院内DRGs标杆
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2015年11月23日
	 */
	Object getDRGsStdBy(String drgCode, String stdYear, String quotaCode, String pType);

	/**
	 * @methodname    :findMedicalRecords
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2015年12月24日
	 */
	public List<Object[]> findMedicalRecords(IndexCal entity);

	/**
	 * @methodname    :findOperationBy
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2015年12月25日
	 */
	public List<Object[]> findOperationBy(String parid);

	/**
	 * @methodname    :findDiagnosisBy
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2015年12月25日
	 */
	public List<Object[]> findDiagnosisBy(String parid);

	/**
	 * @methodname    :findDRGsFeeBy
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2015年12月25日
	 */
	public List<Object[]> findDRGsFeeBy(String parid);

	/**
	 * @methodname    :findMedicalRecordBy
	 * @description   : 医嘱明细接口调用，查询要调用的数据主表id 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年1月14日
	 */
	List<Map<String, Object>> findMedicalRecordBy(String dateFrom, String dateTo);
	
	/**
	 * @methodname    :findMedicalRecordByOutDate
	 * @description   :根据出院日期获取首页信息
	 * @param         :
	 * @author        :WangTeng
	 * @return        :
	 * @date          :2016年4月14日
	 */
	public List<Map<String, Object>> findMedicalRecordByOutDate(String dateFrom,String dateTo);
	/**
	 * 
	 * @methodname    :findOtherDiagCodeNameById
	 * @description   : 通过ID获取其他诊断编码和名称
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2016年6月30日
	 */
	public List<Object[]> findOtherDiagCodeNameById(String parid);
	/**
	 * 
	 * @methodname    :findOperCodeNameById
	 * @description   : 通过ID获取手术编码和名称
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2016年6月30日
	 */
	public List<Object[]> findOperCodeNameById(String parid);
	/**
	 * 
	 *  findDiagnosisByParIds.  
	 *  @Description：
	 *  @Author WENYI
	 *  @param parIDs
	 *  @return 查询多个ID的诊断
	 *  @Date:2017年7月12日下午2:55:25
	 */
	public List<Object[]> findDiagnosisByParIds(String parIDs);
	/**
	 * 
	 *  findOperationByParIds.  
	 *  @Description：
	 *  @Author WENYI
	 *  @param parIDs
	 *  @return 查询多个ID的手术操作
	 *  @Date:2017年7月12日下午2:55:25
	 */
	public List<Object[]> findOperationByParIds(String parIDs);
	/**
	 * 
	 * @methodname    :getMedicalRecordSize
	 * @description   : 获取查询数量
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2016年7月31日
	 */
	public Integer getMedicalRecordSize(String dateFrom, String dateTo);
	/**
	 * 
	 * @methodname    :findMedicalRecords
	 * @description   : 分段查询首页
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2016年7月31日
	 */
	public List<Object[]> findMedicalRecords(String dateFrom,String dateTo, int starts, int length);
	
	public List<Object[]> getAllWard();
	
	/**
	 * 
	 * @methodname    :findMrIdByMrNoAndOutDate
	 * @description   : 根据病案号和出院日期获取ID
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2016年10月14日
	 */
	public List<String> findMrIdByMrNoAndOutDate(String mrNo,String inDate,String OutDate);

	/**
	 * @methodname    :creatMrBaseInfo
	 * @description   :新病案首页信息保存
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月15日
	 */
	void creatMrBaseInfo(MrBaseInfo mr);

	/**
	 * @methodname    :createMrIpInfo
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月16日
	 */
	void createMrIpInfo(MrIpInfo mr);

	/**
	 * @methodname    :createMrAppendPage
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月16日
	 */
	void createMrAppendPage(MrAppendPage mr);

	/**
	 * @methodname    :createMrDiagnose
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月16日
	 */
	void createMrDiagnose(MrDiagnose mr);

	
	/**
	 * 
	 * @Title: getOtherDiagnoseCount
	 * @author:LiQingYang   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param pMainIndex
	 * @param: @return      
	 * @return: int      
	 * @throws
	 * @date:2017年5月10日 上午9:12:03
	 */
	public int getOtherDiagnoseCount(String pMainIndex);
	
	
	/**
	 * 
	 * @Title: clearOtherDiagnose
	 * @author:LiQingYang   
	 * @Description: 清空其它诊断   
	 * @param: @param pMainIndex      
	 * @return: void      
	 * @throws
	 * @date:2017年5月10日 上午9:21:27
	 */
	void clearOtherDiagnose(String pMainIndex);
	
	
	/**
	 * @methodname    :createMrOperation
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月18日
	 */
	void createMrOperation(MrOperation mr);
	
	/**
	 * 
	 * @Title: getOtherOperationCount
	 * @author:LiQingYang   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param pMainIndex
	 * @param: @return      
	 * @return: int      
	 * @throws
	 * @date:2017年5月11日 上午9:00:54
	 */
	public int getOtherOperationCount(String pMainIndex);
	
	/**
	 * 
	 * @Title: clearOtherOperation
	 * @author:LiQingYang   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param pMainIndex      
	 * @return: void      
	 * @throws
	 * @date:2017年5月11日 上午9:00:59
	 */
	void clearOtherOperation(String pMainIndex);

	/**
	 * @methodname    :createMrExpense
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月19日
	 */
	void createMrExpense(MrExpense mr);
	
	/**
	 * @methodname    :createMrExpense
	 * @description   : 
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2016年12月19日
	 */
	void createMrExpenseSum(MrExpenseSum mr);
	
	/**
     * 
     * @Title: getMrExpenseCount
     * @author:LiQingYang   
     * @Description: 获取病例费用总行数  
     * @param: @param pMainIndex
     * @param: @return      
     * @return: int      
     * @throws
     * @date:2017年5月23日 下午4:35:47
     */
    public int getMrExpenseCount(String pMainIndex);
    
    /**
     * 
     * @Title: clearMrExpense
     * @author:LiQingYang   
     * @Description: 删除病例费用   
     * @param: @param pMainIndex      
     * @return: void      
     * @throws
     * @date:2017年5月23日 下午4:34:23
     */
     public  void clearMrExpense(String pMainIndex);

	/**
	 * @methodname    :saveTransData
	 * @description   : 保存转科明细数据
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2017年2月23日
	 */
	public void saveTransData(Map<String, Object> transData);
	
	/**
	 * @methodname    :findPatientsByQuota
	 * @description   :通过指标获取病例列表
	 * @param         :
	 * @author        :WangTeng
	 * @return        :
	 * @date          :2017年5月4日
	 */
	public List<Map<String, Object>> findPatientsByQuota(IndexCal IndexCal);
	/**
	 * @methodname    :isMedicalRecordsExistByDate
	 * @description   :查询某月份病例是否存在
	 * @param         :
	 * @author        :chenhanlin
	 * @return        :
	 * @date          :2017年7月24日
	 */
	public boolean isMedicalRecordsExistByDate(String mm);

	/**
	 * @methodname    :getPatientListByDay
	 * @description   :首页质控接口查询全病案首页
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2017年11月7日
	 */
	List<Object[]> getPatientListByDay(String dateFrom, String dateTo);

	/**
	 * @methodname    :getDiagnoseListById
	 * @description   :全病案首页接口查询首页诊断
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2017年11月7日
	 */
	List<Object[]> getDiagnoseListById(String pmainindex);

	/**
	 * @methodname    :getOperationListById
	 * @description   :全病案首页接口查询首页手术
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2017年11月7日
	 */
	List<Object[]> getOperationListById(String pmainindex);

	/**
	 * @methodname    :getExpenseListById
	 * @description   :全病案首页接口查询首页费用
	 * @param         :
	 * @author        :lileizheng
	 * @return        :
	 * @date          :2017年11月7日
	 */
	List<Object[]> getExpenseListById(String pmainindex);

}

